﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bukstor.Biz;
using Bukstor.Biz.Utils;

namespace Bukstor.UI
{
    public partial class CarritoDeCompras : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Carrito c = Session["carrito"] as Carrito;
            pnlCarritoLleno.Visible = !c.EstaVacio;
            pnlCarritoVacio.Visible = c.EstaVacio;
        }

        public IEnumerable<CarritoDeComprasRow> LeerCarrito()
        {
            BukstorBDEntities Entidades = new BukstorBDEntities();
            List<CarritoDeComprasRow> salida = new List<CarritoDeComprasRow>();
            CarritoDeComprasRow fila;
            foreach (KeyValuePair<int, int> dupla in (Session["carrito"] as Carrito).Compra)
            {
                fila = (from Libro L in Entidades.Libros
                        where L.id == dupla.Key
                        select new CarritoDeComprasRow
                        {
                            Cantidad = dupla.Value,
                            Precio = L.Inventario.precioUnitario,
                            Titulo = L.titulo,
                            Id = L.id
                        }).First();
                fila.Autor = procesarAutores(Entidades.Libros.First(i => i.id == dupla.Key));
                salida.Add(fila);
            }
            return salida;
        }

        public void CambiarElemento(int id, int cantidad)
        {
            BukstorBDEntities entidades = new BukstorBDEntities();
            Libro libro = entidades.Libros.First(i => i.id == id);
            if (!libro.InventarioReference.IsLoaded) libro.InventarioReference.Load();
            if (libro.Inventario.cantidad>=cantidad)
            {
                (Session["carrito"] as Carrito).ModificarCantidad(id, cantidad);
            }
            else
            {
                (Session["carrito"] as Carrito).ModificarCantidad(id, (byte)libro.Inventario.cantidad);
            }
        }

        private void mostrar(string mensaje)
        {
            lblMensaje.Text = mensaje;
        }

        public void EliminarElemento(int id) { CambiarElemento(id, 0); }

        private string procesarAutores(Libro L)
        {
            if (!L.Autores.IsLoaded) L.Autores.Load();
            return ACadena.Autores(L.Autores);
        }

        protected void btnVaciar_Click(object sender, EventArgs e)
        {
            (Session["carrito"] as Carrito).Vaciar();
            Response.Redirect("~/CarritoDeCompras.aspx", true);
        }

        protected void gvCompra_RowUpdated(object sender, GridViewUpdatedEventArgs e)
        {
            Carrito carrito = Session["carrito"] as Carrito;
            int cantPedida = int.Parse(e.NewValues[0].ToString());
            if (cantPedida > 0)
            {
                int cantObtenida = carrito.Compra[(int)e.Keys[0]];
                lblMensaje.Visible = cantObtenida != cantPedida;
            }
            else
            {
                lblMensaje.Visible = false;
                if (carrito.EstaVacio)
                {
                    Response.Redirect("~/CarritoDeCompras.aspx", true);
                }
            }
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            Carrito carrito = Session["carrito"] as Carrito;
            if (carrito.EstaVacio)
            {
                Response.Redirect("~/CarritoDeCompras.aspx", true);
            }
            else
            {
                Response.Redirect("~/Miembros/CompraDireccion.aspx", true);
            }
        }

        protected void gvCompra_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string valor = (string)e.NewValues[0];
            int nuevaCantidad;
            if (!int.TryParse(valor,out nuevaCantidad))
            {
                e.Cancel = true;
            }
        }

        protected void gvCompra_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {
            Carrito carrito = Session["carrito"] as Carrito;

            if (carrito.EstaVacio)
            {
                Response.Redirect("~/CarritoDeCompras.aspx", true);
            }
        }
    }
}
